<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<link rel="STYLESHEET" href="lib.css" type='text/css' />
<link rel="SHORTCUT ICON" href="../icons/pyfav.png" type="image/png" />
<link rel='start' href='../index.html' title='Python documentation Index' />
<link rel="first" href="lib.html" title='Python library Reference' />
<link rel='contents' href='contents.html' title="Contents" />
<link rel='index' href='genindex.html' title='Index' />
<link rel='last' href='about.html' title='About this document...' />
<link rel='help' href='about.html' title='About this document...' />
<link rel="next" href="stream-reader-writer.html" />
<link rel="prev" href="stream-writer-objects.html" />
<link rel="parent" href="codec-base-classes.html" />
<link rel="next" href="stream-reader-writer.html" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name='aesop' content='information' />
<title>4.8.1.5 StreamReader Objects </title>
</head>
<body>
<div class="navigation">
<div id='top-navigation-panel' xml:id='top-navigation-panel'>
<table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td class='online-navigation'><a rel="prev" title="4.8.1.4 streamwriter Objects"
  href="stream-writer-objects.html"><img src='../icons/previous.png'
  border='0' height='32'  alt='Previous Page' width='32' /></a></td>
<td class='online-navigation'><a rel="parent" title="4.8.1 codec Base Classes"
  href="codec-base-classes.html"><img src='../icons/up.png'
  border='0' height='32'  alt='Up one Level' width='32' /></a></td>
<td class='online-navigation'><a rel="next" title="4.8.1.6 streamreaderwriter Objects"
  href="stream-reader-writer.html"><img src='../icons/next.png'
  border='0' height='32'  alt='Next Page' width='32' /></a></td>
<td align="center" width="100%">Python Library Reference</td>
<td class='online-navigation'><a rel="contents" title="Table of Contents"
  href="contents.html"><img src='../icons/contents.png'
  border='0' height='32'  alt='Contents' width='32' /></a></td>
<td class='online-navigation'><a href="modindex.html" title="Module Index"><img src='../icons/modules.png'
  border='0' height='32'  alt='Module Index' width='32' /></a></td>
<td class='online-navigation'><a rel="index" title="Index"
  href="genindex.html"><img src='../icons/index.png'
  border='0' height='32'  alt='Index' width='32' /></a></td>
</tr></table>
<div class='online-navigation'>
<b class="navlabel">Previous:</b>
<a class="sectref" rel="prev" href="stream-writer-objects.html">4.8.1.4 StreamWriter Objects</a>
<b class="navlabel">Up:</b>
<a class="sectref" rel="parent" href="codec-base-classes.html">4.8.1 Codec Base Classes</a>
<b class="navlabel">Next:</b>
<a class="sectref" rel="next" href="stream-reader-writer.html">4.8.1.6 StreamReaderWriter Objects</a>
</div>
<hr /></div>
</div>
<!--End of Navigation Panel-->

<h3><a name="SECTION006815000000000000000"></a><a name="stream-reader-objects"></a>
<br>
4.8.1.5 StreamReader Objects 
</h3>

<p>
The <tt class="class">StreamReader</tt> class is a subclass of <tt class="class">Codec</tt> and
defines the following methods which every stream reader must define in
order to be compatible with the Python codec registry.

<p>
<dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline">
  <td><nobr><b><span class="typelabel">class</span>&nbsp;<tt id='l2h-549' xml:id='l2h-549' class="class">StreamReader</tt></b>(</nobr></td>
  <td><var>stream</var><big>[</big><var>, errors</var><big>]</big><var></var>)</td></tr></table></dt>
<dd>
  Constructor for a <tt class="class">StreamReader</tt> instance. 

<p>
All stream readers must provide this constructor interface. They are
  free to add additional keyword arguments, but only the ones defined
  here are used by the Python codec registry.

<p>
<var>stream</var> must be a file-like object open for reading (binary)
  data.

<p>
The <tt class="class">StreamReader</tt> may implement different error handling
  schemes by providing the <var>errors</var> keyword argument. These
  parameters are defined:

<p>

<ul>
<li><code>'strict'</code> Raise <tt class="exception">ValueError</tt> (or a subclass);
                          this is the default.
</li>
<li><code>'ignore'</code> Ignore the character and continue with the next.
</li>
<li><code>'replace'</code> Replace with a suitable replacement character.
  
</li>
</ul>

<p>
The <var>errors</var> argument will be assigned to an attribute of the
  same name. Assigning to this attribute makes it possible to switch
  between different error handling strategies during the lifetime
  of the <tt class="class">StreamReader</tt> object.

<p>
The set of allowed values for the <var>errors</var> argument can
  be extended with <tt class="function">register_error()</tt>.
</dl>

<p>
<dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline">
  <td><nobr><b><tt id='l2h-550' xml:id='l2h-550' class="method">read</tt></b>(</nobr></td>
  <td><var></var><big>[</big><var>size</var><big>[</big><var>, chars, </var><big>[</big><var>firstline</var><big>]</big><var></var><big>]</big><var></var><big>]</big><var></var>)</td></tr></table></dt>
<dd>
  Decodes data from the stream and returns the resulting object.

<p>
<var>chars</var> indicates the number of characters to read from the
  stream. <tt class="function">read()</tt> will never return more than <var>chars</var>
  characters, but it might return less, if there are not enough
  characters available.

<p>
<var>size</var> indicates the approximate maximum number of bytes to read
  from the stream for decoding purposes. The decoder can modify this
  setting as appropriate. The default value -1 indicates to read and
  decode as much as possible.  <var>size</var> is intended to prevent having
  to decode huge files in one step.

<p>
<var>firstline</var> indicates that it would be sufficient to only return
  the first line, if there are decoding errors on later lines.

<p>
The method should use a greedy read strategy meaning that it should
  read as much data as is allowed within the definition of the encoding
  and the given size, e.g.  if optional encoding endings or state
  markers are available on the stream, these should be read too.

<p>

<span class="versionnote">Changed in version 2.4:
<var>chars</var> argument added.</span>

<span class="versionnote">Changed in version 2.4.2:
<var>firstline</var> argument added.</span>

</dl>

<p>
<dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline">
  <td><nobr><b><tt id='l2h-551' xml:id='l2h-551' class="method">readline</tt></b>(</nobr></td>
  <td><var></var><big>[</big><var>size</var><big>[</big><var>, keepends</var><big>]</big><var></var><big>]</big><var></var>)</td></tr></table></dt>
<dd>
  Read one line from the input stream and return the
  decoded data.

<p>
<var>size</var>, if given, is passed as size argument to the stream's
  <tt class="method">readline()</tt> method.

<p>
If <var>keepends</var> is false line-endings will be stripped from the
  lines returned.

<p>

<span class="versionnote">Changed in version 2.4:
<var>keepends</var> argument added.</span>

</dl>

<p>
<dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline">
  <td><nobr><b><tt id='l2h-552' xml:id='l2h-552' class="method">readlines</tt></b>(</nobr></td>
  <td><var></var><big>[</big><var>sizehint</var><big>[</big><var>, keepends</var><big>]</big><var></var><big>]</big><var></var>)</td></tr></table></dt>
<dd>
  Read all lines available on the input stream and return them as a list
  of lines.

<p>
Line-endings are implemented using the codec's decoder method and are
  included in the list entries if <var>keepends</var> is true.

<p>
<var>sizehint</var>, if given, is passed as the <var>size</var> argument to the
  stream's <tt class="method">read()</tt> method.
</dl>

<p>
<dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline">
  <td><nobr><b><tt id='l2h-553' xml:id='l2h-553' class="method">reset</tt></b>(</nobr></td>
  <td><var></var>)</td></tr></table></dt>
<dd>
  Resets the codec buffers used for keeping state.

<p>
Note that no stream repositioning should take place.  This method is
  primarily intended to be able to recover from decoding errors.
</dl>

<p>
In addition to the above methods, the <tt class="class">StreamReader</tt> must also
inherit all other methods and attributes from the underlying stream.

<p>
The next two base classes are included for convenience. They are not
needed by the codec registry, but may provide useful in practice.

<p>

<div class="navigation">
<div class='online-navigation'>
<p></p><hr />
<table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td class='online-navigation'><a rel="prev" title="4.8.1.4 streamwriter Objects"
  href="stream-writer-objects.html"><img src='../icons/previous.png'
  border='0' height='32'  alt='Previous Page' width='32' /></a></td>
<td class='online-navigation'><a rel="parent" title="4.8.1 codec Base Classes"
  href="codec-base-classes.html"><img src='../icons/up.png'
  border='0' height='32'  alt='Up one Level' width='32' /></a></td>
<td class='online-navigation'><a rel="next" title="4.8.1.6 streamreaderwriter Objects"
  href="stream-reader-writer.html"><img src='../icons/next.png'
  border='0' height='32'  alt='Next Page' width='32' /></a></td>
<td align="center" width="100%">Python Library Reference</td>
<td class='online-navigation'><a rel="contents" title="Table of Contents"
  href="contents.html"><img src='../icons/contents.png'
  border='0' height='32'  alt='Contents' width='32' /></a></td>
<td class='online-navigation'><a href="modindex.html" title="Module Index"><img src='../icons/modules.png'
  border='0' height='32'  alt='Module Index' width='32' /></a></td>
<td class='online-navigation'><a rel="index" title="Index"
  href="genindex.html"><img src='../icons/index.png'
  border='0' height='32'  alt='Index' width='32' /></a></td>
</tr></table>
<div class='online-navigation'>
<b class="navlabel">Previous:</b>
<a class="sectref" rel="prev" href="stream-writer-objects.html">4.8.1.4 StreamWriter Objects</a>
<b class="navlabel">Up:</b>
<a class="sectref" rel="parent" href="codec-base-classes.html">4.8.1 Codec Base Classes</a>
<b class="navlabel">Next:</b>
<a class="sectref" rel="next" href="stream-reader-writer.html">4.8.1.6 StreamReaderWriter Objects</a>
</div>
</div>
<hr />
<span class="release-info">Release 2.5.1, documentation updated on 18th April, 2007.</span>
</div>
<!--End of Navigation Panel-->
<address>
See <i><a href="about.html">About this document...</a></i> for information on suggesting changes.
</address>
</body>
</html>
